Distributed computing systems, such as cloud computing systems, are used by users to execute code on large volumes of data. Use of a third party computing system (e.g. one run by a cloud computing provider rather than the user themselves) provides flexibility to the user as they can pay for computing resources only when they are required. However, the user's lack of control over the infrastructure within the distributed computing system does lead to security concerns. In particular, users may wish to maintain the confidentiality and integrity of both the code being run and the data which is processed by the code. Currently however, a malicious system administrator is able to access (and potentially steal) both the user's code and data. Likewise, a malicious hacker may be able to exploit a vulnerability in the distributed system's code (e.g. a bug in the cloud provider's operating system software) to access and potentially steal the user's code and data.
The embodiments described below are not limited to implementations which solve any or all of the disadvantages of known distributed computing systems.